#ifndef ODBC_DETAILS_BUFFER_CONCEPT_HPP
#define ODBC_DETAILS_BUFFER_CONCEPT_HPP

#include <boost/concept_check.hpp>

namespace odbc
{
namespace details
{

// TODO: Update buffer concept
template< class Buffer>
class buffer_concept
{
public:
	BOOST_CONCEPT_USAGE( buffer_concept)
	{
		// size_type typename declaration required.
		typedef typename Buffer::size_type ST; 

		// value_type typename declaration required.
		typedef typename Buffer::value_type VT;

		// buffer_type typename declaration required.
		typedef typename Buffer::buffer_type TT;

		// default constructor required.
		Buffer buff;

		// Expected member odbc_type_id as enumeration.
		int odbc_id = Buffer::odbc_type_id;
		// Expected member sql_type_id as enumeration.
		int sql_id = Buffer::sql_type_id;

		// Require const value_type& value() const method.
		typename Buffer::value_type val = const_cast< const Buffer&>(buff).value();

		// Require void set_value( const value_type&) method
		buff.set_value( val);

		// Require void* buffer() method.
		void* pbuff = const_cast< Buffer&>(buff).buffer_addr();

		// Require const void* buffer() const method.
		const void* pcbuff = const_cast< const Buffer&>( buff).buffer_addr();

		// Require size_type size() const method.
		typename Buffer::size_type size = const_cast< const Buffer&>( buff).size();
	}
};



	
} // namespace details
} // namespace odbc

#endif // ODBC_DETAILS_BUFFER_CONCEPT_HPP
